package org.dromara.system.utils;

import cn.hutool.http.HttpStatus;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.domain.bo.ArchivesBo;

/**
 * 天眼查请求类
 */
public class SkyEyeClientUtil {
    /**
     * 查询表格数据
     * @param bo 查询条件
     * @param path 路径
     * @return
     */
    public static TableDataInfo queryTable(ArchivesBo bo, String path) {
        JSONObject jo = query(bo, path);
        JSONArray array = new JSONArray();
        int size = 0;
        boolean isNull = jo.isEmpty() || !jo.containsKey("items");

        if(!isNull) {
            array = jo.getJSONArray("items");
            size = jo.getInt("total");
        }

        TableDataInfo tableDataInfo = getTableDataInfo(array, size);

        if(isNull && SkyEyeData.containsKey(path)) {
            tableDataInfo.setRows(SkyEyeData.get(path));
            tableDataInfo.setTotal(SkyEyeData.get(path).size());
        }

        return tableDataInfo;
    }

    /**
     * 查询单条字符串
     * @param bo 查询条件
     * @param path 路径
     */
    public static String queryString(ArchivesBo bo, String path) {
        JSONObject jo = SkyEyeExecuteUtil.execute(bo, path);
        String errorCode = jo.getStr("error_code");

        if(!"0".equals(errorCode)) {
            return "";
        }

        return jo.getStr("result");
    }

    /**
     * 通过查询条件查询整体结果
     * @param bo 查询条件
     * @param path 路径
     * @return 整体结果
     */
    public static JSONObject query(ArchivesBo bo, String path) {
        JSONObject jo = SkyEyeExecuteUtil.execute(bo, path);
        String errorCode = jo.getStr("error_code");

        if(!"0".equals(errorCode)) {
            return new JSONObject();
        }

        return jo.getJSONObject("result");
    }

    /**
     * 查询JSONObject，整体结果
     * @param name 公司名称
     * @param path 查询路径
     * @return 整体结果
     */
    public static JSONObject query(String name, String path) {
        JSONObject jo = SkyEyeExecuteUtil.execute(name, path);
        String errorCode = jo.getStr("error_code");

        if(!"0".equals(errorCode)) {
            return new JSONObject();
        }

        return jo.getJSONObject("result");
    }

    /**
     * 组装tableDataInfo
     * @param array JSONArray
     * @param size 总条数
     * @return TableDataInfo
     */
    private static TableDataInfo getTableDataInfo(JSONArray array, int size) {
        TableDataInfo tableDataInfo = new TableDataInfo();

        tableDataInfo.setRows(array);
        tableDataInfo.setTotal(size);
        tableDataInfo.setCode(HttpStatus.HTTP_OK);
        tableDataInfo.setMsg("查询成功");

        return tableDataInfo;
    }
}
